<?php
    // +----------------------------------------------------------------------
    // | 海豚PHP框架 [ DolphinPHP ]
    // +----------------------------------------------------------------------
    // | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
    // +----------------------------------------------------------------------
    // | 官方网站: http://dolphinphp.com
    // +----------------------------------------------------------------------
    // | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------

    namespace app\store\admin;

    use app\admin\controller\Admin;
    use app\common\builder\ZBuilder;
    use app\store\model\ SliderModel;
    use app\store\model\ SliderTypeModel;

    /**
     * 滚动图片控制器
     *
     * @package app\store\admin
     */
    class Slider extends Admin
    {

        /**
         * 滚动图片列表
         *
         * @return mixed
         * @throws \think\Exception
         * @throws \think\exception\DbException
         */
        public function lists()
        {

            // 查询
            $map = $this->getMap();
            // 排序
            $order = $this->getOrder();
            // 数据列表
            $data_list = SliderModel::where($map)->order($order)->paginate();
            $btnType   = [
                'class' => 'btn btn-info',
                'title' => '轮播分类',
                'icon'  => 'fa fa-fw fa-sitemap',
                'href'  => url('slider_type/index')
            ];

            $list_type = SliderTypeModel::where('status',1)->column('id,name');
            array_unshift($list_type,'默认分类');
            // 使用ZBuilder快速创建数据表格
            return ZBuilder::make('table')->setSearch(['title' => '标题'])// 设置搜索框
            ->addColumns([ // 批量添加数据列
                           ['id','ID'],
                           ['typeid','分类','select',$list_type],
                           ['cover','图片','picture'],
                           ['title','标题','text.edit'],
                           ['url','链接','text.edit'],
                           ['create_time','创建时间','datetime'],
                           ['sort','排序','text.edit'],
                           ['status','状态','switch'],
                           ['right_button','操作','btn']
            ])->addTopButtons('add,enable,disable,delete')// 批量添加顶部按钮
            ->addTopButton('custom',$btnType)// 添加顶部按钮
            ->addRightButtons(['edit','delete' => ['data-tips' => '删除后无法恢复。']])// 批量添加右侧按钮
            ->addOrder('id,title,create_time')->setRowList($data_list)// 设置表格数据
            ->addValidate('Slider','title,url')->fetch(); // 渲染模板
        }

        /**
         * 新增
         *
         * @return mixed
         * @throws \think\Exception
         */
        public function add()
        {

            // 保存数据
            if ($this->request->isPost())
            {
                // 表单数据
                $data = $this->request->post();

                // 验证
                $result = $this->validate($data,'Slider');
                if (true !== $result)
                    $this->error($result);

                if ($slider = SliderModel::create($data))
                {

                    $this->success('新增成功','lists');
                }
                else
                {
                    $this->error('新增失败');
                }
            }
            $list_type = SliderTypeModel::where('status',1)->column('id,name');
            array_unshift($list_type,'默认分类');
            // 显示添加页面
            return ZBuilder::make('form')->addFormItems([
                ['select','typeid','轮播分类','',$list_type,0],
                ['text','title','标题'],
                ['image','cover','图片'],
                ['text','url','链接'],
                ['text','sort','排序','',100],
                ['radio','status','立即启用','',['否','是'],1]
            ])->fetch();
        }

        /**
         * 编辑
         *
         * @param null $id 滚动图片id
         *
         * @return mixed
         * @throws \think\Exception
         * @throws \think\exception\DbException
         */
        public function edit($id = null)
        {

            if ($id === null)
                $this->error('缺少参数');

            // 保存数据
            if ($this->request->isPost())
            {
                // 表单数据
                $data = $this->request->post();

                // 验证
                $result = $this->validate($data,'Slider');
                if (true !== $result)
                    $this->error($result);

                if (SliderModel::update($data))
                {
                    // 记录行为
                    action_log('slider_add','store_slider',$id,UID,$data['title']);
                    $this->success('编辑成功','lists');
                }
                else
                {
                    $this->error('编辑失败');
                }
            }

            $info      = SliderModel::get($id);
            $list_type = SliderTypeModel::where('status',1)->column('id,name');
            array_unshift($list_type,'默认分类');
            // 显示编辑页面
            return ZBuilder::make('form')->addFormItems([
                ['hidden','id'],
                ['select','typeid','轮播分类','',$list_type,0],
                ['text','title','标题'],
                ['image','cover','图片'],
                ['text','url','链接'],
                ['text','sort','排序'],
                ['radio','status','立即启用','',['否','是']]
            ])->setFormData($info)->fetch();
        }

        /**
         * 删除单页
         *
         * @param array $record 行为日志
         *
         * @author 蔡伟明 <314013107@qq.com>
         * @return mixed
         */
        public function delete($record = [])
        {

            return $this->setStatus('delete');
        }

        /**
         * 启用单页
         *
         * @param array $record 行为日志
         *
         * @author 蔡伟明 <314013107@qq.com>
         * @return mixed
         */
        public function enable($record = [])
        {

            return $this->setStatus('enable');
        }

        /**
         * 禁用单页
         *
         * @param array $record 行为日志
         *
         * @author 蔡伟明 <314013107@qq.com>
         * @return mixed
         */
        public function disable($record = [])
        {

            return $this->setStatus('disable');
        }

        /**
         * 设置单页状态：删除、禁用、启用
         *
         * @param string $type 类型：delete/enable/disable
         * @param array  $record
         *
         * @author 蔡伟明 <314013107@qq.com>
         * @return mixed
         */
        public function setStatus($type = '',$record = [],$Model = null)
        {

            $ids          = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
            $slider_title = SliderModel::where('id','in',$ids)->column('title');
            return parent::setStatus($type,['slider_' . $type,'store_slider',0,UID,implode('、',$slider_title)]);
        }

        /**
         * 快速编辑
         *
         * @param array $record 行为日志
         *
         * @author 蔡伟明 <314013107@qq.com>
         * @return mixed
         */
        public function quickEdit($record = [])
        {

            $id      = input('post.pk','');
            $field   = input('post.name','');
            $value   = input('post.value','');
            $slider  = SliderModel::where('id',$id)->value($field);
            $details = '字段(' . $field . ')，原值(' . $slider . ')，新值：(' . $value . ')';
            return parent::quickEdit(['slider_edit','store_slider',$id,UID,$details]);
        }
    }